package com.csap.framework.apidoc;

import com.csap.framework.apidoc.model.CsapDocModel;
import com.csap.framework.apidoc.model.CsapDocParameter;
import com.csap.framework.properties.apidoc.ModelType;
import com.csap.framework.properties.apidoc.ParamType;
import com.csap.framework.util.map.CsapMap;
import com.csap.mybatisplus.page.Page;
import com.google.common.base.Supplier;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * @author yangchengfu
 * @description 全局数据接口
 * <p>
 * key：匹配方法
 * value 参数
 * <p/>
 * @dataTime 2020年-03月-01日 17:41:00
 **/
public interface GlobalCsapRequestParamProvider extends Supplier<Map<String, List<CsapDocModel>>> {
    /**
     * 默认分页参数
     *
     * @return
     */
    static Map<String, List<CsapDocModel>> defaultParam() {
        return CsapMap.<String, List<CsapDocModel>>build().add("Page", Arrays.asList(CsapDocModel.builder()
                .name(Page.class.getName())
                .value("分页参数")
                .description("分页参数")
                .modelType(ModelType.OBJECT)
                .global(true)
                .parameters(
                        Arrays.asList(CsapDocParameter.builder()
                                        .dataType(Long.class.getSimpleName())
                                        .defaultValue("20")
                                        .description("每页显示条数")
                                        .example("20")
                                        .force(true)
                                        .length(11)
                                        .name("size/pageSize")
                                        .paramType(ParamType.QUERY)
                                        .position(0)
                                        .required(false)
                                        .value("每页显示条数")
                                        .build(),
                                CsapDocParameter.builder()
                                        .dataType(Long.class.getSimpleName())
                                        .defaultValue("1")
                                        .description("当前页数")
                                        .example("1")
                                        .length(11)
                                        .force(true)
                                        .name("current/currentPage")
                                        .paramType(ParamType.QUERY)
                                        .position(0)
                                        .required(false)
                                        .value("当前页数")
                                        .build(),
                                CsapDocParameter.builder()
                                        .dataType("String[]")
                                        .defaultValue("create_time")
                                        .description("排序字段 ")
                                        .example("GET:?column=create_time&column=id POST:asc:['create_time','id']")
                                        .name("column")
                                        .force(true)
                                        .paramType(ParamType.QUERY)
                                        .position(0)
                                        .required(false)
                                        .value("排序字段")
                                        .build(),
                                CsapDocParameter.builder()
                                        .dataType("Boolean[]")
                                        .defaultValue(Boolean.TRUE.toString())
                                        .description("是否正序排列 接收数组形式参数,该参数和cloum排序字段一一对应")
                                        .example("GET:?asc=true&asc=true POST:asc:[true,false]")
                                        .name("asc")
                                        .force(true)
                                        .paramType(ParamType.QUERY)
                                        .position(0)
                                        .required(false)
                                        .value("是否正序排列")
                                        .build()))
                .build()));
    }
}
